package com.cjt.chat.mapper;

import com.cjt.chat.pojo.Group;
import com.cjt.chat.pojo.GroupMessage;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author cjt
 * @since 2024/3/29
 */
public interface GroupMapper {
    //根据用户id查询拥有的群组id
    List<Integer> getGroupIdList(@Param("userId") Integer userId);

    //根据群组id列表查询所拥有的群组信息
    List<Group> getGroupList(@Param("groupList") List<Integer> groupList);

    //根据群组id查询群成员id
    List<Integer> getGroupMemberIdList(@Param("groupId") Integer groupId);

    //查询群聊天记录
    List<GroupMessage> getGroupMessage(@Param("groupId") Integer groupId, @Param("page") Integer page);

    //添加群用户
    void addGroupMember(@Param("groupId") Integer groupId, @Param("userId") Integer userId, @Param("role") Integer role);

    //移出群用户
    void removeGroupMember(@Param("groupId") Integer groupId, @Param("userId") Integer userId);

    //设置群公告
    void setGroupNotice(@Param("groupId") Integer groupId, @Param("notice") String notice);

    //查询群组成员权限
    Integer getGroupMemberRole(@Param("groupId") Integer groupId, @Param("userId") Integer userId);

    //查询用户是否查看通知
    Integer getGroupMemberNoticeState(@Param("groupId") Integer groupId, @Param("userId") Integer userId);

    //保存群消息
    void saveGroupMessage(GroupMessage groupMessage);

    //根据群组id查询群组信息
    Group queryGroupByGroupId(@Param("groupId") Integer groupId);

    //查询群人数
    Integer queryGroupNumber(@Param("groupId") Integer groupId);

    //查询用户是否在该群中
    Integer queryUserInGroup(@Param("userId") Integer userId, @Param("groupId") Integer groupId);

    //查询群主id
    Integer queryGroupMasterId(@Param("groupId") Integer groupId);

    //根据群主id查询创建的群聊
    List<Integer> queryAllGroupByMasterId(@Param("masterId") Integer masterId);

    //删除群聊
    void deleteGroupById(@Param("groupId") Integer groupId);

    //删除所有群聊记录
    void deleteGroupMessageById(@Param("groupId") Integer groupId);

    //删除所有群成员
    void deleteGroupMemberById(@Param("groupId") Integer groupId);

    //修改群名称
    void updateGroupName(@Param("groupId") Integer groupId, @Param("groupName") String groupName);

    //创建群聊
    void createGroup(@Param("group") Group group);
}
